home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1997 December / PC Pro December 1997 CD-Rom coverdisc.iso / symantec / dbAnywh / JAVA.BIN / CLASSES.ZIP / sun / tools / javadoc / MIFPrintStream.class (.txt) < prev   
Encoding:
Java Class File  |  1996-12-14  |  11.1 KB  |  526 lines

  1. package sun.tools.javadoc;
  2.  
  3. import java.io.PrintStream;
  4. import java.util.Date;
  5. import java.util.Vector;
  6.  
  7. public class MIFPrintStream {
  8.    PrintStream out;
  9.    public static final int STATE_OUTER = 0;
  10.    public static final int STATE_PARAGRAPH = 1;
  11.    public static final int STATE_LINE = 2;
  12.    public static final int STATE_STRING = 3;
  13.    public static final char hardReturnChar = '\t';
  14.    public static final char hardSpaceChar = '\u0011';
  15.    public static final int MIF_VERSION = 5;
  16.    int state;
  17.    Vector pendingMarks;
  18.    int currentStringLength;
  19.    static Date today = new Date();
  20.    static final int MarkerHF1 = 0;
  21.    static final int MarkerHF2 = 1;
  22.    static final int MarkerIndex = 2;
  23.    static final int MarkerComment = 3;
  24.    static final int MarkerSubject = 4;
  25.    static final int MarkerAuthor = 5;
  26.    static final int MarkerGlossary = 6;
  27.    static final int MarkerEquation = 7;
  28.    static final int MarkerHypertext = 8;
  29.    static final int MarkerXRef = 9;
  30.    static final int MarkerCondText = 10;
  31.    static final int BOLD = 1;
  32.    static final int ITALIC = 2;
  33.    static final int UNDERLINE = 4;
  34.    static final int SMALLCAPS = 8;
  35.    static final int TTY = 16;
  36.    boolean isFormatted;
  37.    boolean lastSpace;
  38.    int currentFont;
  39.    int desiredFont;
  40.    String currentType;
  41.  
  42.    public MIFPrintStream(PrintStream var1, String var2, int var3) {
  43.       this.out = var1;
  44.       var1.println("<MIFFile " + 5 + ".00>");
  45.       var1.println("<Comment Generated by javadoc on " + today + ">");
  46.       if (var2 != null) {
  47.          this.include(var2);
  48.       }
  49.  
  50.       var1.println("<TextFlow <TFTag `A'> <TFAutoConnect Yes> <TextRectID " + var3 + ">");
  51.       this.state = 0;
  52.    }
  53.  
  54.    public MIFPrintStream println(Object var1) {
  55.       this.out.println(var1.toString());
  56.       return this;
  57.    }
  58.  
  59.    public MIFPrintStream newParagraph(String var1) {
  60.       this.topLevel();
  61.       this.out.println("<Para");
  62.       if (var1 != null) {
  63.          this.out.println("   <PgfTag `" + var1 + "'>");
  64.       }
  65.  
  66.       this.state = 1;
  67.       return this;
  68.    }
  69.  
  70.    public MIFPrintStream newParaLine() {
  71.       this.inParagraph();
  72.       this.out.println("   <ParaLine");
  73.       this.state = 2;
  74.       return this;
  75.    }
  76.  
  77.    public MIFPrintStream newString(String var1) {
  78.       this.inParaLine();
  79.       this.out.print("      <" + var1 + " `");
  80.       this.state = 3;
  81.       this.currentStringLength = 0;
  82.       return this;
  83.    }
  84.  
  85.    public MIFPrintStream topLevel() {
  86.       if (this.state > 0) {
  87.          this.inParagraph();
  88.          this.out.println("> # end paragraph");
  89.       }
  90.  
  91.       this.state = 0;
  92.       return this;
  93.    }
  94.  
  95.    public MIFPrintStream inParagraph() {
  96.       if (this.state < 1) {
  97.          throw new RuntimeException("Bad call to inParagraph");
  98.       } else {
  99.          if (this.state > 1) {
  100.             this.inParaLine();
  101.             this.out.println("   >");
  102.             this.state = 1;
  103.          }
  104.  
  105.          return this;
  106.       }
  107.    }
  108.  
  109.    public MIFPrintStream inParaLine() {
  110.       if (this.state < 2) {
  111.          return this.newParaLine();
  112.       } else {
  113.          if (this.state > 2) {
  114.             this.inString();
  115.             this.out.println("'>");
  116.             this.state = 2;
  117.          }
  118.  
  119.          return this;
  120.       }
  121.    }
  122.  
  123.    public MIFPrintStream inString() {
  124.       return this.state < 3 ? this.newString("String") : this;
  125.    }
  126.  
  127.    public MIFPrintStream indent(double var1, double var3, double var5) {
  128.       this.inParagraph();
  129.       this.out.println("   <PgfFIndent  " + var1 + "in>");
  130.       this.out.println("   <PgfLIndent  " + var3 + "in>");
  131.       this.out.println("   <PgfRIndent  " + var5 + "in>");
  132.       return this;
  133.    }
  134.  
  135.    MIFPrintStream skip(int var1) {
  136.       this.inParagraph();
  137.       this.out.println("   <PgfSpBefore  " + var1 + "pt>");
  138.       return this;
  139.    }
  140.  
  141.    MIFPrintStream bold(Object var1) {
  142.       this.inParaLine();
  143.       this.out.println("      <Font <FTag `'> <FWeight `Bold'> >");
  144.       this.literal(var1);
  145.       this.inParaLine();
  146.       this.out.println("      <Font <FTag `'> >");
  147.       return this;
  148.    }
  149.  
  150.    MIFPrintStream italic(Object var1) {
  151.       this.inParaLine();
  152.       this.out.println("      <Font <FTag `'> <FAngle `Italic'> >");
  153.       this.literal(var1);
  154.       this.inParaLine();
  155.       this.out.println("      <Font <FTag `'> >");
  156.       return this;
  157.    }
  158.  
  159.    MIFPrintStream tty(Object var1) {
  160.       this.inParaLine();
  161.       this.out.println("      <Font <FTag `'> <FFamily `Courier'> >");
  162.       this.literal(var1);
  163.       this.inParaLine();
  164.       this.out.println("      <Font <FTag `'> >");
  165.       return this;
  166.    }
  167.  
  168.    MIFPrintStream charTag(String var1, Object var2) {
  169.       this.inParaLine();
  170.       this.out.println("      <Font <FTag `" + var1 + "'>  >");
  171.       this.literal(var2);
  172.       this.inParaLine();
  173.       this.out.println("      <Font <FTag `'> >");
  174.       return this;
  175.    }
  176.  
  177.    public MIFPrintStream literal(Object var1) {
  178.       String var2 = var1.toString();
  179.       int var3 = var2.length();
  180.  
  181.       for(int var4 = 0; var4 < var3; ++var4) {
  182.          this.literal(var2.charAt(var4));
  183.       }
  184.  
  185.       return this;
  186.    }
  187.  
  188.    public MIFPrintStream literal(char var1) {
  189.       this.inString();
  190.       ++this.currentStringLength;
  191.       switch (var1) {
  192.          case '\t':
  193.             this.out.print("\\t");
  194.             ++this.currentStringLength;
  195.             break;
  196.          case '\n':
  197.             this.out.print("\\n");
  198.             this.inParagraph();
  199.             break;
  200.          case ' ':
  201.             this.out.print(' ');
  202.             if (this.currentStringLength >= 55) {
  203.                this.inParaLine();
  204.             }
  205.             break;
  206.          case '\'':
  207.             this.out.print("\\q");
  208.             ++this.currentStringLength;
  209.             break;
  210.          case '>':
  211.             this.out.print("\\>");
  212.             ++this.currentStringLength;
  213.             break;
  214.          case '\\':
  215.             this.out.print("\\\\");
  216.             ++this.currentStringLength;
  217.             break;
  218.          case '`':
  219.             this.out.print("\\Q");
  220.             ++this.currentStringLength;
  221.             break;
  222.          default:
  223.             if (var1 >= ' ' && var1 < 128) {
  224.                this.out.print(var1);
  225.             } else {
  226.                this.currentStringLength += 4;
  227.                this.out.print("\\x" + Character.forDigit(var1 >> 4 & 15, 16) + Character.forDigit(var1 & 15, 16) + ' ');
  228.             }
  229.       }
  230.  
  231.       return this;
  232.    }
  233.  
  234.    private void markInternal(int var1, Object var2) {
  235.       if (this.state == 0) {
  236.          if (this.pendingMarks == null) {
  237.             this.pendingMarks = new Vector();
  238.          }
  239.  
  240.          this.pendingMarks.addElement(new Integer(var1));
  241.          this.pendingMarks.addElement(var2);
  242.       } else {
  243.          this.inParaLine();
  244.          this.out.println("      <Marker <MType " + var1 + "> <MText `" + var2 + "'> >");
  245.       }
  246.    }
  247.  
  248.    public MIFPrintStream mark(int var1, Object var2) {
  249.       this.markInternal(var1, this.literalText(var2.toString(), false));
  250.       return this;
  251.    }
  252.  
  253.    public MIFPrintStream markReference(Object var1) {
  254.       this.markInternal(9, this.literalText(var1.toString(), false));
  255.       return this;
  256.    }
  257.  
  258.    public MIFPrintStream index(Object var1, String var2) {
  259.       this.markInternal(2, this.literalText(var1.toString(), true) + '[' + this.literalText(var2.toString(), true) + ']');
  260.       return this;
  261.    }
  262.  
  263.    public MIFPrintStream index(Object var1) {
  264.       this.markInternal(2, this.literalText(var1.toString(), true));
  265.       return this;
  266.    }
  267.  
  268.    private String literalText(String var1, boolean var2) {
  269.       int var3 = var1.length();
  270.       StringBuffer var4 = new StringBuffer();
  271.  
  272.       for(int var5 = 0; var5 < var3; ++var5) {
  273.          char var6 = var1.charAt(var5);
  274.          switch (var6) {
  275.             case '\'':
  276.                var4.append("\\q");
  277.                break;
  278.             case '>':
  279.                var4.append("\\>");
  280.                break;
  281.             case '[':
  282.             case ']':
  283.                if (var2) {
  284.                   var4.append("\\\\");
  285.                }
  286.  
  287.                var4.append(var6);
  288.                break;
  289.             case '\\':
  290.                var4.append("\\\\");
  291.                break;
  292.             case '`':
  293.                var4.append("\\Q");
  294.                break;
  295.             default:
  296.                if (var6 >= ' ' && var6 < 128) {
  297.                   var4.append(var6);
  298.                } else {
  299.                   var4.append("\\x" + Character.forDigit(var6 >> 4 & 15, 16) + Character.forDigit(var6 & 15, 16) + ' ');
  300.                }
  301.          }
  302.       }
  303.  
  304.       return var4.toString();
  305.    }
  306.  
  307.    public MIFPrintStream emitPendingMarks() {
  308.       if (this.pendingMarks != null) {
  309.          for(int var1 = 0; var1 < this.pendingMarks.size(); var1 += 2) {
  310.             int var2 = ((Number)this.pendingMarks.elementAt(var1)).intValue();
  311.             String var3 = (String)this.pendingMarks.elementAt(var1 + 1);
  312.             this.mark(var2, var3);
  313.          }
  314.       }
  315.  
  316.       this.pendingMarks = null;
  317.       return this;
  318.    }
  319.  
  320.    public MIFPrintStream XRef(String var1, String var2, String var3) {
  321.       String var4 = this.literalText(var2, false);
  322.       String var5 = var3 == null ? "" : this.literalText("<c>" + var3, false);
  323.       this.inParaLine();
  324.       this.out.println("      <XRef <XRefName `" + var1 + "'>");
  325.       this.out.println("            <XRefSrcText `" + var4 + "'>");
  326.       this.out.println("            <XRefSrcFile `" + var5 + "'>");
  327.       this.out.println("      > #XRef");
  328.       this.out.println("      <String `page\\x11 XX\u0015XX'>");
  329.       this.out.println("      <XRefEnd>");
  330.       return this;
  331.    }
  332.  
  333.    public MIFPrintStream close() {
  334.       this.topLevel();
  335.       this.out.println("> #end TextFlow");
  336.       this.out.println("# end of MIF");
  337.       this.out.close();
  338.       return null;
  339.    }
  340.  
  341.    MIFPrintStream html(String var1, String var2) {
  342.       int[] var3 = new int[30];
  343.       int var4 = 0;
  344.       this.newParagraph(var1);
  345.       this.currentFont = this.desiredFont = 0;
  346.       this.isFormatted = false;
  347.       this.lastSpace = true;
  348.       this.currentType = var1;
  349.  
  350.       for(int var5 = 0; var5 < var2.length(); ++var5) {
  351.          char var6 = var2.charAt(var5);
  352.          String var7 = null;
  353.          switch (var6) {
  354.             case '\t':
  355.             case '\n':
  356.             case ' ':
  357.                if (this.isFormatted) {
  358.                   this.htmlLiteral(var6 == ' ' ? '\u0011' : var6);
  359.                } else if (!this.lastSpace) {
  360.                   this.htmlLiteral(' ');
  361.                }
  362.                break;
  363.             case '&':
  364.                if (var2.startsWith("gt;", var5 + 1)) {
  365.                   this.htmlLiteral('>');
  366.                   var5 += 3;
  367.                } else if (var2.startsWith("lt;", var5 + 1)) {
  368.                   this.htmlLiteral('<');
  369.                   var5 += 3;
  370.                } else if (var2.startsWith("amp;", var5 + 1)) {
  371.                   this.htmlLiteral('&');
  372.                   var5 += 4;
  373.                } else if (var2.startsWith("quot;", var5 + 1)) {
  374.                   this.htmlLiteral('"');
  375.                   var5 += 5;
  376.                } else if (var2.startsWith("reg;", var5 + 1)) {
  377.                   this.htmlLiteral('┬¿');
  378.                   var5 += 4;
  379.                } else if (var2.startsWith("copy;", var5 + 1)) {
  380.                   this.htmlLiteral('┬⌐');
  381.                   var5 += 5;
  382.                } else {
  383.                   this.htmlLiteral('&');
  384.                }
  385.                break;
  386.             case '<':
  387.                int var8 = var2.indexOf(62, var5 + 1);
  388.                if (var8 <= var5 + 1) {
  389.                   this.htmlLiteral('<');
  390.                } else {
  391.                   var7 = var2.substring(var5 + 1, var8);
  392.                   char var9 = var7.charAt(0);
  393.                   if (var9 != '/' && Character.digit(var9, 36) == -1) {
  394.                      this.htmlLiteral('<');
  395.                      var7 = null;
  396.                   } else {
  397.                      var5 = var8;
  398.                   }
  399.                }
  400.                break;
  401.             default:
  402.                this.htmlLiteral(var6);
  403.          }
  404.  
  405.          if (var7 != null) {
  406.             if (!var7.equalsIgnoreCase("tt") && !var7.equalsIgnoreCase("code")) {
  407.                if (!var7.equalsIgnoreCase("cite") && !var7.equalsIgnoreCase("em") && !var7.equalsIgnoreCase("i")) {
  408.                   if (var7.equalsIgnoreCase("b")) {
  409.                      var3[var4++] = this.currentFont;
  410.                      this.desiredFont = this.currentFont | 1;
  411.                   } else if (var7.equalsIgnoreCase("strong")) {
  412.                      var3[var4++] = this.currentFont;
  413.                      this.desiredFont = this.currentFont | 1 | 8;
  414.                   } else if (!var7.equalsIgnoreCase("/tt") && !var7.equalsIgnoreCase("/code") && !var7.equalsIgnoreCase("/cite") && !var7.equalsIgnoreCase("/em") && !var7.equalsIgnoreCase("/i") && !var7.equalsIgnoreCase("/b") && !var7.equalsIgnoreCase("/strong")) {
  415.                      if (var7.equalsIgnoreCase("pre")) {
  416.                         this.topLevel();
  417.                         ++var4;
  418.                         var3[var4] = this.currentFont;
  419.                         this.topLevel();
  420.                         this.desiredFont = this.currentFont | 16;
  421.                         this.isFormatted = true;
  422.                      } else if (var7.equalsIgnoreCase("/pre")) {
  423.                         this.topLevel();
  424.                         --var4;
  425.                         this.desiredFont = var3[var4];
  426.                         this.isFormatted = false;
  427.                      } else if (!var7.equalsIgnoreCase("p") && !var7.equalsIgnoreCase("par")) {
  428.                         if (!var7.startsWith("a ") && !var7.startsWith("A ") && !var7.equalsIgnoreCase("/a")) {
  429.                            if (var7.indexOf("@") > 0 && var7.indexOf(32) == -1) {
  430.                               this.htmlLiteral('<');
  431.                               var5 -= var7.length();
  432.                            } else {
  433.                               System.out.println("Unknown html <" + var7 + ">");
  434.                            }
  435.                         }
  436.                      } else {
  437.                         this.topLevel();
  438.                      }
  439.                   } else if (var4 == 0) {
  440.                      System.out.println("Font stack underflow");
  441.                      this.desiredFont = 0;
  442.                   } else {
  443.                      --var4;
  444.                      this.desiredFont = var3[var4];
  445.                   }
  446.                } else {
  447.                   ++var4;
  448.                   var3[var4] = this.currentFont;
  449.                   this.desiredFont = this.currentFont | 2;
  450.                }
  451.             } else {
  452.                var3[var4++] = this.currentFont;
  453.                this.desiredFont = this.currentFont | 16;
  454.             }
  455.          }
  456.       }
  457.  
  458.       return this;
  459.    }
  460.  
  461.    private void htmlLiteral(char var1) {
  462.       if (this.state < 1) {
  463.          this.newParagraph(this.currentType);
  464.          this.out.println("   <PgfSpBefore  6pt>");
  465.          this.currentFont = 0;
  466.          this.lastSpace = true;
  467.       }
  468.  
  469.       if (this.currentFont != this.desiredFont) {
  470.          this.inParagraph();
  471.          this.out.println("   <Font <FTag `'> >");
  472.          this.out.print("   <Font ");
  473.          if ((this.desiredFont & 2) != 0) {
  474.             this.out.print("<FAngle Italic> ");
  475.          }
  476.  
  477.          if ((this.desiredFont & 1) != 0) {
  478.             this.out.print("<FBold Yes> ");
  479.          }
  480.  
  481.          if ((this.desiredFont & 4) != 0) {
  482.             this.out.print("<FUnderlining FSingle> ");
  483.          }
  484.  
  485.          if ((this.desiredFont & 8) != 0) {
  486.             this.out.print("<FCase FSmallCaps> ");
  487.          }
  488.  
  489.          if ((this.desiredFont & 16) != 0) {
  490.             this.out.print("<FFamily Courier> ");
  491.          }
  492.  
  493.          this.out.println(">");
  494.          this.currentFont = this.desiredFont;
  495.       }
  496.  
  497.       this.literal(var1);
  498.       this.lastSpace = var1 <= ' ';
  499.    }
  500.  
  501.    private void include(String var1) {
  502.       this.out.println("include(" + var1 + ")");
  503.    }
  504.  
  505.    public MIFPrintStream importText(String var1) {
  506.       this.newParagraph("Body");
  507.       this.inParaLine();
  508.       this.println("      <TextInset");
  509.       this.println("          <TiSrcFile `" + var1 + "'>");
  510.       this.println("#         <TiLastUpdate  0 0>");
  511.       this.println("          <TiAutoUpdate Yes>");
  512.       this.println("          <TiFlow");
  513.       this.println("             <TiMainFlow Yes>");
  514.       this.println("             <TiFormatting TiEnclosing> #TiSource");
  515.       this.println("             <TiFormatRemovePageBreaks No>");
  516.       this.println("             <TiFormatRemoveOverrides No>");
  517.       this.println("          > # end of TiFlow");
  518.       this.println("       > # end of TextInset");
  519.       this.newParagraph("Body");
  520.       this.inParaLine();
  521.       this.println("      <TextInsetEnd>");
  522.       this.topLevel();
  523.       return this;
  524.    }
  525. }
  526.